**Replication code for Liu X, Si F, Xie C and Xie L (2023), "Minority state ownership and firm performance: Evidence from the Chinese stock market crash in 2015"
**Financial Management

*Table 1 is derived from direct statistics from the WIND database.

*Code to generate  Table 2
gen treat1=1 if 国家队15>=1&国家队16>=1&国家队17>=1&国家队18>=1
replace treat1=0 if 国家队15==0&国家队16==0&国家队17==0&国家队18==0 
gen post=1 if year>2015
replace post=0 if year<2015
**********
*Summary Statistics
********** 
global v1 "ROA1 ROA2 ROA3 ROA4 ROE1 ROE2 ROE3 ROE4"
global v2 "treat1 post"
global v3 "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
global v $v1 $v2 $v3  
*-输出到 Excel
logout, save(Var_statistic) excel replace:  ///
        tabstat  $v  ,        ///
        s(N mean sd min p25 p50 p75 max)    ///
        format(%6.3f) column(statis)

*Code to generate  Table 3		
gen 以1划分=treat1*post
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
  *-column (1)
	reghdfe ROA2 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
  *-column (2)
	reghdfe ROE2 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份

	*-呈现结果
    global mm "c1 c2 "
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(ROA ROE)

*Code to generate  Table 4		
gen p2013=1 if year==2013
replace p2013=0 if p2013==.
gen p2014=1 if year==2014
replace p2014=0 if p2014==.
gen p2016_18=1 if year==2016|year==2017|year==2018
replace p2016_18=0 if p2016_18==.
gen tp2013=treat1*p2013
gen tp2014=treat1*p2014
gen tp2016_18=treat1*p2016_18

global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
	  *-column (1)
	reghdfe ROA2  tp2013 tp2014 tp2016_18  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
  *-column (2)
	reghdfe ROE2  tp2013 tp2014 tp2016_18  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份
	*-呈现结果
    global mm "c1 c2"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(ROA ROE)

*Code to generate  Table 5		
use "C:\Users\DELL\Desktop\psmdata.dta", clear // 仅在具有滞后变量的事件年份观察
* Run logit regression to obtain matching scores
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 

tab treat1 // treatment dummy
encode Industry, gen(Ind1)
logit treat1 $x  
predict pscore if e(sample), pr 
gen double pscore2=Ind1*10+pscore // 
* Keep scores
keep Stkcd treat1 pscore pscore2
compress
save "C:\Users\DELL\Desktop\pscore2.dta", replace

** PSM
 use "C:\Users\DELL\Desktop\pscore2.dta", clear
 rename Stkcd firmID
* Matching
psmatch2 treat1 , pscore(pscore2) comm neighbor(2) caliper(0.001) // 
sort _id
gen firmID1=firmID[_n1]
gen firmID2=firmID[_n2]

rename firmID firmID0
keep if _n1!=. // at least have one matched case
keep _id firmID0 firmID1  firmID2
reshape long firmID, i(_id) j(mark)
gen treat1=(mark==0) // 公司ID0为原始处理公司，表格ID1-公司ID3为匹配控制公司
drop if firmID==.
* Keep and save
keep _id firmID treat1 //_id 现在用作每个匹配对的配对 ID
order _id firmID treat1
compress
 rename firmID Stkcd
 save "C:\Users\DELL\Desktop\sample_psm.dta" ,replace
tab treat1

use "C:\Users\DELL\Desktop\FM DATA.dta", clear
cd"C:\Users\DELL\Desktop"
sort Stkcd  
joinby Stkcd    using sample_psm,unmatched(using)
drop _merge
*duplicates drop Stkcd year,force  //
tab treat1

*Table 5 Panel A
ttable3 ROA2 ROE2 Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual if year==2014, by(treat1)  f(%6.3f)  
ttable3 ROA2 ROE2 Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual if year==2014, by(treat1)  f(%6.3f)   media

*Table 5 Panel B
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
	  *-column (1)
	reghdfe ROA2 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
  *-column (2)
	reghdfe ROE2 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份
	*-呈现结果
    global mm "c1 c2"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(ROA ROE)

**Generate Tables 6	
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
	  *-column (1)
	reghdfe 托宾Q值A 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
	  *-column (1)
	reghdfe ebitda总资产 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2           // 2015政府持有股份

 *-呈现结果
     global mm "c1 c2"
     dis "Denpendent = " in y "$y"
     esttab $mm,  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
         scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
		 compress nogaps          ///
         order($x) ///
		 mtitle(十大股东 十大流通股东 )	

**Generate Tables 7	
use "F:\原始数据.dta", clear
gen treat333=1 if 国家队15>=3&国家队16>=3&国家队17>=3&国家队18>=3
replace treat333=0 if  国家队15==0&国家队16==0&国家队17==0&国家队18==0
gen 是3以上=treat333*post
gen treat555=1 if 国家队15>=5&国家队16>=5&国家队17>=5&国家队18>=5
replace treat555=0 if 国家队15==0&国家队16==0&国家队17==0&国家队18==0
gen 是5以上=treat555*post
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
 *-column (1)
	reghdfe ROA2 是3以上 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
  *-column (1)
	reghdfe ROE2 是3以上 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份
 *-column (1)
	reghdfe ROA2 是5以上 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c3            // 2015政府持有股份
  *-column (1)
	reghdfe ROE2 是5以上 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c4            // 2015政府持有股份
	*-呈现结果
    global mm "c1 c2 c3 c4"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(ROA ROE)

**Generate Tables 8	
* Tables 8	Panel A
gen 高科技1=1 if 行业名称=="电气机械及器材制造业"
replace 高科技=1 if 行业名称=="广播、电视、电影和影视录音制作业"
replace 高科技=1 if 行业名称=="计算机、通信和其他电子设备制造业"
replace 高科技=1 if 行业名称=="铁路、船舶、航空航天和其它运输设备制造业"
replace 高科技=1 if 行业名称=="研究和试验发展"
replace 高科技=1 if 行业名称=="医药制造业"
replace 高科技=1 if 行业名称=="仪器仪表制造业"
replace 高科技=0 if 行业名称=="专用设备制造业"
replace 高科技=0 if 高科技==.
gen 科技=以1划分 if 高科技==1
gen 非科技=以1划分 if 高科技==0
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
*前三大股东股权
    *-column (1)
	reghdfe ROA2 科技 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c1           // 全样本  
    *-column (2)
	reghdfe ROA2 非科技 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c2           // 上市前  
     *-column (3)
	reghdfe ROE2 科技 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c3           // 上市前  
     *-column (4)
	reghdfe ROE2 非科技 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c4           // 上市前  

	*-呈现结果
    global mm "c1 c2 c3 c4"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(科技 非科技 科技 非科技)
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
capture program drop AME_Panel     //清空历史命令
program define AME_Panel, eclass   //命令开始，将这段命令的名字定义为"AME_Probit"
  preserve
  tempname b b1 b0                  //定义三个用于临时存储的名字
	reghdfe ROA2 科技 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(科技) post
  matrix `b1'=e(b)                 //获平均边际效应b1
	reghdfe ROA2 非科技 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(非科技) post
  matrix `b0'=e(b)                 //获取平均边际效应b0
  matrix `b'=`b1'-`b0'             //获取两组样本的平均边际效应之差 (b1-b0)
  ereturn post `b'
end   
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
 bootstrap _b, cluster(Stkcd) idcluster(newid) nowarn reps(500) seed(6666): AME_Panel  

 capture program drop AME_Panel     //清空历史命令
program define AME_Panel, eclass   //命令开始，将这段命令的名字定义为"AME_Probit"
  preserve
  tempname b b1 b0                  //定义三个用于临时存储的名字
	reghdfe ROE2 科技 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(科技) post
  matrix `b1'=e(b)                 //获取平均边际效应b1
	reghdfe ROE2 非科技 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(非科技) post
  matrix `b0'=e(b)                 //获取平均边际效应b0
  matrix `b'=`b1'-`b0'             //获取两组样本的平均边际效应之差 (b1-b0)
  ereturn post `b'
end   
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
 bootstrap _b, cluster(Stkcd) idcluster(newid) nowarn reps(500) seed(6666): AME_Panel  

* Tables 8	Panel B
bys ind year: egen 行业年度均值=mean(ROA)
gen ADJ_ROA=ROA-行业年度均值
xtset stkcd year
rangestat (sd) Risk3=ADJ_ROA (count) N=ADJ_ROA, interval(year -4 0) by(stkcd) 

 drop 风险 高风险 非高风险
gen 风险=1 if Risk3>.0233305
replace 风险=0 if 风险==.
gen 高风险=以1划分 if 风险==1
gen 非高风险=以1划分 if 风险==0

global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
*前三大股东股权
    *-column (1)
	reghdfe ROA2 高风险 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c1           // 全样本  
    *-column (2)
	reghdfe ROA2 非高风险 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c2           // 上市前  
     *-column (3)
	reghdfe ROE2 高风险 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c3           // 上市前  
     *-column (4)
	reghdfe ROE2 非高风险 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c4           // 上市前  

	*-呈现结果
    global mm "c1 c2 c3 c4"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(科技 非科技 科技 非科技)
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
capture program drop AME_Panel     //清空历史命令
program define AME_Panel, eclass   //命令开始，将这段命令的名字定义为"AME_Probit"
  preserve
  tempname b b1 b0                  //定义三个用于临时存储的名字
	reghdfe ROA2 高风险 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(高风险) post
  matrix `b1'=e(b)                 //获取平均边际效应b1
	reghdfe ROA2 非高风险 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(非高风险) post
  matrix `b0'=e(b)                 //获取平均边际效应b0
  matrix `b'=`b1'-`b0'             //获取两组样本的平均边际效应之差 (b1-b0)
  ereturn post `b'
end   
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
 bootstrap _b, cluster(Stkcd) idcluster(newid) nowarn reps(500) seed(6666): AME_Panel  

 capture program drop AME_Panel     //清空历史命令
program define AME_Panel, eclass   //命令开始，将这段命令的名字定义为"AME_Probit"
  preserve
  tempname b b1 b0                  //定义三个用于临时存储的名字
	reghdfe ROE2 高风险 $x if Risk1~=.,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(高风险) post
  matrix `b1'=e(b)                 //获取平均边际效应b1
	reghdfe ROE2 非高风险 $x if Risk1~=.,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(非高风险) post
  matrix `b0'=e(b)                 //获取平均边际效应b0
  matrix `b'=`b1'-`b0'             //获取两组样本的平均边际效应之差 (b1-b0)
  ereturn post `b'
end   
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
 bootstrap _b, cluster(Stkcd) idcluster(newid) nowarn reps(500) seed(6666): AME_Panel  

**Generate Tables 9	
* Tables 9	Panel A
sum 股权集中指标3,d
drop 股权分散  股权高 股权低
gen 股权分散=1 if 股权集中指标3>=45.6842
replace 股权分散=0 if 股权分散==.
gen 股权高=以1划分 if 股权分散==1
gen 股权低=以1划分 if 股权分散==0
sum 股权集中指标10,d
drop 股权分散3 股权高3 股权低3
gen 股权分散3=1 if 股权集中指标10>=56.80415    
replace 股权分散3=0 if 股权分散3==.
gen 股权高3=以1划分 if 股权分散3==1
gen 股权低3=以1划分 if 股权分散3==0
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
*第一大股东股权
    *-column (1)
	reghdfe ROA2 股权高 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c1           // 全样本  
    *-column (2)
	reghdfe ROA2 股权低 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c2           // 上市前  
     *-column (3)
	reghdfe ROE2 股权高 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c3           // 上市前  
     *-column (4)
	reghdfe ROE2 股权低 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c4           // 上市前  

	*-呈现结果
    global mm "c1 c2 c3 c4"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(股权高 股权低 股权高 股权低)

* Tables 9	Panel B
capture program drop AME_Panel     //清空历史命令
program define AME_Panel, eclass   //命令开始，将这段命令的名字定义为"AME_Probit"
  preserve
  tempname b b1 b0                  //定义三个用于临时存储的名字
	reghdfe ROA2 股权高 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(股权高) post
  matrix `b1'=e(b)                 //获取平均边际效应b1
	reghdfe ROA2 股权低 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(股权低) post
  matrix `b0'=e(b)                 //获取平均边际效应b0
  matrix `b'=`b1'-`b0'             //获取两组样本的平均边际效应之差 (b1-b0)
  ereturn post `b'
end                                //自己编写的命令到此结束
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
 bootstrap _b, cluster(Stkcd) idcluster(newid) nowarn reps(500) seed(6666): AME_Panel  

 capture program drop AME_Panel     //清空历史命令
program define AME_Panel, eclass   //命令开始，将这段命令的名字定义为"AME_Probit"
  preserve
  tempname b b1 b0                  //定义三个用于临时存储的名字
	reghdfe ROE2 股权高 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(股权高) post
  matrix `b1'=e(b)                 //获取平均边际效应b1
	reghdfe ROE2 股权低 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(股权低) post
  matrix `b0'=e(b)                 //获取平均边际效应b0
  matrix `b'=`b1'-`b0'             //获取两组样本的平均边际效应之差 (b1-b0)
  ereturn post `b'
end                                //自己编写的命令到此结束
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
 bootstrap _b, cluster(Stkcd) idcluster(newid) nowarn reps(500) seed(6666): AME_Panel  

*前十大股东股权
	global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 

    *-column (1)
	reghdfe ROA2 股权高3 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c1           // 全样本  
    *-column (2)
	reghdfe ROA2 股权低3 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c2           // 上市前  
     *-column (3)
	reghdfe ROE2 股权高3 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c3           // 上市前  
     *-column (4)
	reghdfe ROE2 股权低3 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
    est store c4           // 上市前  

	*-呈现结果
    global mm "c1 c2 c3 c4"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(股权高 股权低 股权高 股权低)
capture program drop AME_Panel     //清空历史命令
program define AME_Panel, eclass   //命令开始，将这段命令的名字定义为"AME_Probit"
  preserve
  tempname b b1 b0                  //定义三个用于临时存储的名字
	reghdfe ROA2 股权高3 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(股权高3) post
  matrix `b1'=e(b)                 //获取制造业组的平均边际效应b1
	reghdfe ROA2 股权低3 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(股权低3) post
  matrix `b0'=e(b)                 //获取非制造业组的平均边际效应b0
  matrix `b'=`b1'-`b0'             //获取两组样本的平均边际效应之差 (b1-b0)
  ereturn post `b'
end   
 *使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
 bootstrap _b, cluster(Stkcd) idcluster(newid) nowarn reps(500) seed(6666): AME_Panel  

capture program drop AME_Panel     //清空历史命令
program define AME_Panel, eclass   //命令开始，将这段命令的名字定义为"AME_Probit"
  preserve
  tempname b b1 b0                  //定义三个用于临时存储的名字
	reghdfe ROE2 股权高3 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(股权高3) post
  matrix `b1'=e(b)                 //获取制造业组的平均边际效应b1
	reghdfe ROE2 股权低3 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  margins,dydx(股权低3) post
  matrix `b0'=e(b)                 //获取非制造业组的平均边际效应b0
  matrix `b'=`b1'-`b0'             //获取两组样本的平均边际效应之差 (b1-b0)
  ereturn post `b'
end                                //自己编写的命令到此结束
*使用Bootstrap方法运行上述命令"AME_Panel"，重复进行500次。
 bootstrap _b, cluster(Stkcd) idcluster(newid) nowarn reps(500) seed(6666): AME_Panel  

 
 **Generate Tables 10
 collapse (sd) 日收益率标准差=考虑现金红利再投资的日个股回报率, by(stkcd 证券代码 year)

 global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
   *-column (1)
	reghdfe r_sd 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
 *-column (1)
	reghdfe 盈余波动性3 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份

	*-呈现结果
    global mm "c1 c2"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(ROA ROE)
	
gen 冗员=在职员工人数/资产总计*1000000
xi: reg 冗员 PPE Size Lev Growth ROA i.Industry i.year, r
est store reg1
predict 超额雇员, resid
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
	  *-column (1)
	reghdfe 冗员 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
  *-column (2)
	reghdfe 超额雇员 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份

	*-呈现结果
    global mm "c1 c"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(ROA ROE)

 **Generate Tables 11	
cd"C:\Users\DELL\Desktop\投资效率"
*Code example for calculating investment efficiency
gen Growth_NEG=Growth_1*NEG_1
bys IND year: asreg Invest4 Growth_1 NEG_1 Growth_NEG, fitted
gen 残差c4=_residuals
gen 投资效率c4=abs(残差c4)
gen 过度投资c4=abs(残差c4) if 残差c4>0
gen 投资不足c4=abs(残差c4) if 残差c4<0

*****
sort Stkcd  year
joinby Stkcd year  using chen投资效率,unmatched(master)
drop _merge
 *-column (1)
reghdfe 投资效率c4 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
 est store c1            // 2015政府持有股份
 *-column (2)
reghdfe 投资不足c4 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
est store c2            // 2015政府持有股份
 *-column (3)
reghdfe 投资过度c4 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
 est store c3            // 2015政府持有股份
	*-呈现结果
    global mm "c1 c2 c3"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(投资效率c4 投资不足c4 投资过度c4)

 **Generate Tables 12	
*Code example for calculating TFP using the OP method
gen 总产出=营业收入/10000
gen 资本投入=固定资产净额/10000
gen 劳动力投入=支付给职工以及为职工支付的现金/10000
gen 投资=购建固定资产无形资产和其他长期资产支付的现金/10000
winsor2 总产出  资本投入 劳动力投入 投资, cuts(1 99) replace by(year)
gen lnY=ln(1+总产出)
gen lnL=ln(1+劳动力投入)
gen lnK=ln(1+资本投入)
gen lnI=ln(1+投资)
gen Age=year-year(上市日期)+1
gen State=( regexm(股权性质, "国有"))  if 股权性质!=""
gen EX=(海外销售收入>0)
* Exit 退出变量
bys stkcd: egen 是否ST或PT=max(年末是否ST或PT)
gen Exit=(退市日期!=. | 是否ST或PT==1 )
gen Ind=substr(行业代码, 1, 1)
replace Ind=substr(行业代码, 1, 2) if Ind=="C"
gen reg=省份
foreach i in lnY lnL lnK Age State EX Exit {
    drop if `i'==.
}
xtset stkcd year
xi: opreg lnY, exit(Exit) state(Age lnK) proxy(lnI) free(lnL i.Ind i.year i.reg) cvars(State EX )   vce(bootstrap, seed(1357) rep(5)) 
est store OP
gen tfp_op=lnY - _b[lnL]*lnL-_b[lnK]*lnK

****
cd"C:\Users\DELL\Desktop"
sort Stkcd  year
joinby Stkcd year using 专利,unmatched(master)
drop _merge
gen innovation=ln(调整后总专利+1)
replace 被引数量=1 if 被引数量==.
gen cite=ln(被引数量+1)

 global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
 *-column (1)
	reghdfe TFP_OP 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
 *-column (2)
	reghdfe innovation 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份
  *-column (3)
	reghdfe cite 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c3            // 2015政府持有股份
	*-呈现结果
    global mm "c1 c2 c3"
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(ROA ROE)

 **Generate Tables 13	
by Stkcd :replace ddebt1=ddebt1[_n+1] if missing(ddebt1)
by Stkcd :replace ddebt1=ddebt1[_n-1] if missing(ddebt1) 
by Stkcd :replace 政府补助占总资产比例=政府补助占总资产比例[_n+1] if missing(政府补助占总资产比例)
by Stkcd :replace 政府补助占总资产比例=政府补助占总资产比例[_n-1] if missing(政府补助占总资产比例) 
by Stkcd :replace 税收优惠=税收优惠[_n+1] if missing(税收优惠)
by Stkcd :replace 税收优惠=税收优惠[_n-1] if missing(税收优惠) 
replace 税收优惠=0 if 税收优惠==.
replace 政府补助占总资产比例=0 if 政府补助占总资产比例==.
replace ddebt1=0 if ddebt1==.
gen 税收优惠1=1 if 税收优惠~=0
replace 税收优惠1=0 if 税收优惠1==.
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
 *-column (1)
	reghdfe ddebt1 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
  *-column (1)
	reghdfe 政府补助占总资产比例 以1划分 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份
	  *-column (1)
	reghdfe 税收优惠1 以1划分  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c3            // 2015政府持有股份
	*-呈现结果
    global mm "c1 c2 c3 "
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
	mtitle(ROA ROE)

 **Generate Tables 14
use "F:\原始数据.dta", clear
*
global x  "Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual" 
 *-column (1)
	reghdfe ROA2 退出 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c1            // 2015政府持有股份
  *-column (1)
	reghdfe ROE2 退出 $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c2            // 2015政府持有股份
	  *-column (1)
	reghdfe ROA2 退出1  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c3            // 2015政府持有股份
  *-column (1)
	reghdfe ROE2 退出1  $x ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
     est store c4            // 2015政府持有股份

	*-呈现结果
    global mm "c1 c2 c3 c4 "
    dis "Denpendent = " in y "$y"
    esttab $mm, t  b(%6.3f) star(* 0.1 ** 0.05 *** 0.01)  ///
    scalar(r2 r2_a F N FeChi2 FeChi2p YrChi2 YrChi2p)  ///
	compress nogaps          ///
    order($x)  ///
		 mtitle(ROA ROE ROA ROE ROA )


****************************************
**==========*Figure 2: Placebo Tests============***
* 系数矩阵
mat b = J(5000,1,0)
* 标准误矩阵
mat se = J(5000,1,0)
* P值矩阵
mat p = J(5000,1,0)
forvalues i=1/5000{
  * 循环5000次
use "C:\sers\DELL\Desktop\FM DATA.dta" ,clear
 xtset Stkcd year  //平衡面板数据
 duplicates drop Stkcd, force
 sample 308, count   //
 keep Stkcd  //得到所抽取样本的id编号
 save matchid.dta, replace   //另存id编号数据
  cd"C:\Users\DELL\Desktop"
 merge 1:m Stkcd using FM DATA.dta //与原数据匹配
 replace treat1 = (_merge == 3) //将所抽取样本赋值为1，其余为0
 gen did = treat1*post
reghdfe ROA2 did  Size Lev Growth Age Intangibility CapEx Top1 Inshare  Indratio Dual ,absorb(Stkcd year) vce(cluster Stkcd) keepsingletons
  
  * 将回归结果赋值到对应矩阵的对应位置
 mat b[`i',1] = _b[did]
 mat se[`i',1] = _se[did]
  
  * 计算P值并赋值于矩阵
 mat p[`i',1] = 2*ttail(e(df_r), abs(_b[did]/_se[did]))
}
* 矩阵转化为向量
svmat b, names(coef)
svmat se, names(se)
svmat p, names(pvalue)
* 删除空值并添加标签
drop if pvalue1 == .
label var pvalue1 p值
label var coef1 估计系数
gen tvalue= coef1/ se1
twoway (scatter pvalue1 coef1, xline(0 -0.016, lwidth(0.2) lp(shortdash)) xlabel(-0.03(0.01)0.03, grid) xtitle(估计系数) ytitle(p值) msymbol(smcircle_hollow) mcolor(orange) legend(off)) (kdensity coef1, title(安慰剂检验))
histogram coef1, kdensity xline(-0.011) width(0.001) xtitle("Coefficients") ytitle("Density") 
histogram coef1, kdensity xline(-0.020) width(0.002) xtitle("Coefficients") ytitle("Density") 
